#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>

#define A(i,j) a[(i-1)*n+j-1]
#define B(i,j) b[(i-1)*p+j-1]
#define C(i,j) c[(i-1)*p+j-1]

int *matrixmul(int m,int n, int p,int *a,int *b)
{
	int i,j,k;
	int *c;
	c=(int *)malloc(m*p*sizeof(int));
	for(i=1;i<=m;i++) for(j=1;j<=p;j++) for(k=1;k<=n;k++) C(i,j)+=A(i,k)*B(k,j);
	return c;
}

int main()
{
	int i,j,k;
	int *a,*b,*c;
	int m,n,p,q;
	m=1000;
	n=m;
	p=n;
	a=(int *)malloc(m*n*sizeof(int));
	b=(int *)malloc(n*p*sizeof(int));
	for(i=1;i<=m;i++) for(j=1;j<=n;j++) A(i,j)=i;
	for(i=1;i<=n;i++) for(j=1;j<=p;j++) B(i,j)=j;
	c=matrixmul(m,n,p,a,a);
//	for(i=1;i<=m;i++) for(j=1;j<=p;j++) printf("%d ",C(i,j));
	free(a);
	free(b);
	free(c);
	return 0;
}


